package ar.frba.utn.diseñosistemas.TP2;

public class Busqueda {
	
	private String origen;
	private String destino;
	private String fecha;
	
	private Clase[] clases;
	private Ubicacion ubicacion;
	private int precioMinimo;
	private int precioMaximo;
	private boolean verReservados;
	private int escalas = 0;
	
	private IOrdenamiento ordenamiento;
	
	public Busqueda(String origen, String destino, String fecha, Clase[] clases, Ubicacion ubicacion
					, Integer precioMinimo, Integer precioMaximo, Boolean verReservados, IOrdenamiento ordenamiento, int escalas)
	{
		this.setOrigen(origen);
		this.setDestino(destino);
		this.setFecha(fecha);
		
		this.setUbicacion(ubicacion);
		this.setClases(clases);
		this.setPrecioMaximo(precioMaximo);
		this.setPrecioMinimo(precioMinimo);
		this.setVerReservados(verReservados);
		this.setEscalas(escalas);
	}

	public void setOrigen(String origen) 
	{
		if (origen == null || origen.isEmpty())
			throw new RuntimeException("El origen no puede ser nulo ni vacio");
		
		this.origen = origen;
	}
	public String getOrigen() 
	{
		return origen;
	}
	

	public void setDestino(String destino) 
	{
		if (destino == null || destino.isEmpty())
			throw new RuntimeException("El destino no puede ser nulo ni vacio");
		
		this.destino = destino;
	}
	public String getDestino() 
	{
		return destino;
	}
	

	public void setFecha(String fecha) 
	{
		if (fecha == null || fecha.isEmpty())
			throw new RuntimeException("La Fecha de Salida no puede ser nulo ni vacia");
		
		this.fecha = fecha;
	}
	public String getFecha() 
	{
		return fecha;
	}
	
	public int getEscalas() 
	{
		return escalas;
	}
	public void setEscalas(int escalas) 
	{
		this.escalas = escalas;
	}	
	
	public Clase[] getClases() 
	{
		return clases;
	}
	public void setClases(Clase[] clase) 
	{
		this.clases = clase;
	}
	

	public Ubicacion getUbicacion() 
	{
		return ubicacion;
	}
	public void setUbicacion(Ubicacion ubicacion) 
	{
		this.ubicacion = ubicacion;
	}
	
	
	public void setVerReservados(Boolean verReservados) 
	{
		this.verReservados = (verReservados == null) ? false : verReservados;
	}

	public boolean verReservados() 
	{
		return verReservados;
	}

	
	public void setPrecioMaximo(Integer precioMaximo) 
	{
		this.precioMaximo = (precioMaximo == null) ? Integer.MAX_VALUE : precioMaximo;
	}
	public int getPrecioMaximo() 
	{
		return precioMaximo;
	}
	
	
	public void setPrecioMinimo(Integer precioMinimo) 
	{
		this.precioMinimo = (precioMinimo == null) ? 0 : precioMinimo;
	}
	public int getPrecioMinimo() 
	{
		return precioMinimo;
	}

	public void setOrdenamiento(IOrdenamiento ordenamiento)
	{
		this.ordenamiento = ordenamiento;
	}
	public IOrdenamiento getOrdenamiento()
	{
		return this.ordenamiento;
	}
}
